home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / helper / source / dspstr.asm < prev    next >
Assembly Source File  |  1991-10-18  |  14KB  |  579 lines

  1. ;*****************************
  2. ;    セグメント宣言
  3. ;*****************************
  4. pmdata    segment dword public 'DATA' use32
  5. pmdata    ends
  6. pmcode    segment dword public 'CODE' use32
  7. pmcode    ends
  8.  
  9. VRAMSEL    equ    104h
  10. TBIOSEL    equ    110h
  11. FONTSEL    equ    138h
  12.  
  13. ISKAN1    equ    1
  14. ISKAN2    equ    2
  15.  
  16. ;*************************************
  17. ;    protect data segment defs
  18. ;*************************************
  19. pmdata    segment
  20.  
  21. ;*************************************
  22. ;    16色VRAMビットパタ-ン
  23. ;*************************************
  24. ankfnt    dd    16*256 dup(?)
  25. fntcol    dd    256 dup(?)
  26.  
  27. colptn    dd    000000000h,011111111h,022222222h,033333333h
  28.     dd    044444444h,055555555h,066666666h,077777777h
  29.     dd    088888888h,099999999h,0AAAAAAAAh,0BBBBBBBBh
  30.     dd    0CCCCCCCCh,0DDDDDDDDh,0EEEEEEEEh,0FFFFFFFFh
  31.  
  32. fntptn    dd    000000000h,0F0000000h,00F000000h,0FF000000h
  33.     dd    000F00000h,0F0F00000h,00FF00000h,0FFF00000h
  34.     dd    0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
  35.     dd    000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
  36.     dd    00000F000h,0F000F000h,00F00F000h,0FF00F000h
  37.     dd    000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
  38.     dd    0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
  39.     dd    000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
  40.     dd    000000F00h,0F0000F00h,00F000F00h,0FF000F00h
  41.     dd    000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
  42.     dd    0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
  43.     dd    000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
  44.     dd    00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
  45.     dd    000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
  46.     dd    0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
  47.     dd    000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
  48.     dd    0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
  49.     dd    000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
  50.     dd    0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
  51.     dd    000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
  52.     dd    00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
  53.     dd    000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
  54.     dd    0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
  55.     dd    000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
  56.     dd    000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
  57.     dd    000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
  58.     dd    0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
  59.     dd    000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
  60.     dd    00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
  61.     dd    000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
  62.     dd    0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
  63.     dd    000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
  64.     dd    00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
  65.     dd    000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
  66.     dd    0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
  67.     dd    000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
  68.     dd    00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
  69.     dd    000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
  70.     dd    0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
  71.     dd    000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
  72.     dd    000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
  73.     dd    000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
  74.     dd    0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
  75.     dd    000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
  76.     dd    00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
  77.     dd    000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
  78.     dd    0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
  79.     dd    000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
  80.     dd    0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
  81.     dd    000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
  82.     dd    0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
  83.     dd    000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
  84.     dd    00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
  85.     dd    000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
  86.     dd    0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
  87.     dd    000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
  88.     dd    000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
  89.     dd    000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
  90.     dd    0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
  91.     dd    000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
  92.     dd    00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
  93.     dd    000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
  94.     dd    0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
  95.     dd    000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
  96.  
  97. ;**********************************************
  98. ;    漢字コ-ドチェックテ-ブル
  99. ;**********************************************
  100.     public    kantbl
  101. ;        0 1 2 3 4 5 6 7 8 9 A B C D E F
  102. kantbl    db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;0
  103.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;1
  104.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;2
  105.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;3
  106.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;4
  107.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;5
  108.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;6
  109.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0    ;7
  110.     db    2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;8
  111.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;9
  112.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;A
  113.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;B
  114.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;C
  115.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;D
  116.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;E
  117.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0    ;F
  118.  
  119. pmdata    ends
  120. ;*************************************
  121. ;    protect data segment defs end
  122. ;*************************************
  123.  
  124. ;*************************************
  125. ;    stack parametor defs
  126. ;*************************************
  127. p_para    struc
  128. p_vadr    dd    ?
  129. p_ebp    dd    ?
  130. p_eip    dd    ?
  131. p_str    dd    ?
  132. p_page    dd    ?
  133. p_x    dd    ?
  134. p_y    dd    ?
  135. p_chrc    dd    ?
  136. p_bakc    dd    ?
  137. p_fsiz    dd    ?
  138. p_para    ends
  139.  
  140. ;*************************************
  141. ;    protect code segment defs
  142. ;*************************************
  143. pmcode    segment
  144.     assume    cs:pmcode,ds:pmdata
  145.  
  146. ;****************************************************************************
  147. ;void    wrtstr(char *str,int page,int x,int y,
  148. ;           int chrcol,int bakcol,int fsiz)
  149. ;****************************************************************************
  150.     align    4                ; align set
  151.     public    wrtstr
  152. wrtstr    proc    near
  153.     push    ebp
  154.     push    eax                ; vram address work
  155.     mov    ebp,esp
  156.     push    gs
  157.     push    fs
  158.     push    es
  159.     push    esi
  160.     push    edi
  161.     push    ebx
  162.  
  163.     mov    ax,VRAMSEL            ; VRAM Selecter
  164.     mov    gs,ax                ; gs = VRAM Selecter
  165.     mov    ax,TBIOSEL            ; TBIOS Selecter
  166.     mov    fs,ax                ; fs = TBIOS
  167.  
  168.     mov    edi,[ebp].p_y            ; dsp pos Y
  169.     shl    edi,9                ; Y * 512
  170.     mov    eax,[ebp].p_x            ; dsp pos X
  171.     shr    eax,1                ; X / 2
  172.     add    edi,eax                ; vram address
  173.     and    edi,03FFFFh            ; mask 1 page
  174.     mov    [ebp].p_vadr,edi        ; work set
  175.  
  176.     movzx    eax,byte ptr [ebp].p_chrc
  177.     and    al,0fh
  178.     mov    eax,[eax*4+offset colptn]
  179.     mov    [ebp].p_chrc,eax        ; color pattn cheng
  180.  
  181.     movzx    eax,byte ptr [ebp].p_bakc
  182.     and    al,0fh
  183.     mov    eax,[eax*4+offset colptn]
  184.     mov    [ebp].p_bakc,eax        ; color pattn cheng
  185.  
  186.     align    4                ; align set
  187. wrtlop:                        ; Put Loop
  188.     mov    esi,[ebp].p_str            ; char *str
  189.     movzx    eax,byte ptr [esi]
  190.     inc    si
  191.     or    al,al
  192.     jz    end_wrt                ; End of String ?
  193.  
  194.     mov    bl,[eax+offset kantbl]
  195.     and    bl,ISKAN1
  196.     jz    wrtank                ; Not iskanji1 ?
  197.     movzx    ebx,byte ptr [esi]
  198.     mov    bh,[ebx+offset kantbl]
  199.     and    bh,ISKAN2
  200.     jz    wrtank                ; Not iskanji2 ?
  201.     mov    bh,al
  202.     inc    si
  203.     mov    [ebp].p_str,esi            ; Save *str
  204.  
  205.     shl    bh,1                ; Shift Jis to Jis
  206.     cmp    bl,080h
  207.     adc    bx,1f61h
  208.     add    bl,7fh
  209.     jc    short wrtst1
  210.     add    bl,0a2h
  211. wrtst1:    and    bh,7fh                ; StoJ end
  212.  
  213.     mov    ax,0100h            ; get font egb call
  214.     mov    dx,1010h            ; 16 * 16
  215.     push    ds
  216.     call    pword ptr fs:[00a0h]        ; Get Kanji Font
  217.     push    ds                ; ds:esi = Kanji Font
  218.     pop    es                ; cheng ds<->es
  219.     pop    ds
  220.  
  221.     mov    edi,[ebp].p_vadr        ; vram address
  222.     and    edi,03FFFFh            ; mask 1 page
  223.     or    edi,[ebp].p_page        ; page
  224.     mov    ecx,[ebp].p_fsiz        ; Y = 16 Dot Font
  225.     align    4                ; align set
  226.  
  227. wtkn1:    mov    bx,es:[esi]
  228.     add    esi,2
  229.  
  230.     cmp    byte ptr [ebp].p_fsiz,16
  231.     je    short wtkn2
  232.     or    bx,es:[esi]
  233.     add    esi,2
  234. wtkn2:
  235.     movzx    eax,bl                ; Get Kanji Left Font Pattan
  236.     mov    eax,[eax*4+fntptn]        ; Get Vram Bit Patan
  237.     mov    edx,eax
  238.     not    edx
  239.     and    eax,[ebp].p_chrc
  240.     and    edx,[ebp].p_bakc
  241.     or    eax,edx
  242.     mov    gs:[edi],eax            ; Write Kanji Left Font
  243.  
  244.     movzx    eax,bh                ; Get Kanji Right Font Pattan
  245.     mov    eax,[eax*4+fntptn]        ; Get Vram Bit Patan
  246.     mov    edx,eax
  247.     not    edx
  248.     and    eax,[ebp].p_chrc
  249.     and    edx,[ebp].p_bakc
  250.     or    eax,edx
  251.     mov    gs:[edi+4],eax            ; Write Kanji Right Font
  252.  
  253.     add    edi,512                ; 1 Line 512 Byte
  254.     and    edi,03FFFFh
  255.     or    edi,[ebp].p_page        ; Page
  256.     loop    wtkn1
  257.  
  258.     add    [ebp].p_vadr,8            ; 16 / 2
  259.     jmp    wrtlop                ; Next Put String Loop
  260.  
  261.     align    4                ; align set
  262. wrtank:                        ; Write Ank Font
  263.     cmp    al,1Bh                ; Esc Code
  264.     jne    short wtak0
  265.  
  266.     movzx    eax,byte ptr [esi]
  267.     inc    esi
  268. wtak0:    mov    [ebp].p_str,esi            ; Save *str
  269.     mov    esi,eax
  270.  
  271.     cmp    byte ptr [ebp].p_fsiz,16
  272.     jne    short wrtft1
  273.     shl    esi,4                ; x16
  274.     add    esi,3D800h            ; 8x16 ANK Font Offset
  275.     jmp    short wrtft2
  276. wrtft1:    shl    esi,3                ; x8
  277.     add    esi,3D000h            ; 8x8 ANK Font Offset
  278.  
  279. wrtft2:    mov    ax,FONTSEL            ; ANK Font Selecter
  280.     mov    es,ax
  281.  
  282.     mov    edi,[ebp].p_vadr        ; vram address
  283.     and    edi,03FFFFh            ; mask 1 page
  284.     or    edi,[ebp].p_page        ; Page
  285.     mov    ecx,[ebp].p_fsiz        ; Y = 16 Dot Font
  286.     align    4                ; align set
  287.  
  288. wtak1:    movzx    eax,byte ptr es:[esi]        ; Get Font Pattan
  289.     inc    esi
  290.     mov    eax,[eax*4+fntptn]        ; Get Vram Bit Patan
  291.     mov    edx,eax
  292.     not    edx
  293.     and    eax,[ebp].p_chrc
  294.     and    edx,[ebp].p_bakc
  295.     or    eax,edx
  296.     mov    gs:[edi],eax            ; Write Ank Font
  297.  
  298.     add    edi,512                ; 1 Line 512 Byte
  299.     and    edi,03FFFFh
  300.     or    edi,[ebp].p_page        ; Page
  301.     loop    wtak1
  302.  
  303.     add    [ebp].p_vadr,4            ; 8 / 2
  304.     jmp    wrtlop                ; Next Put String Loop
  305.  
  306. end_wrt:
  307.     pop    ebx
  308.     pop    edi
  309.     pop    esi
  310.     pop    es
  311.     pop    fs
  312.     pop    gs
  313.     pop    eax                ; work dmy pop
  314.     pop    ebp
  315.     ret                    ; end of wrtstr
  316.  
  317. wrtstr    endp
  318.  
  319. ;*****************************************************
  320. ;void    putstr(char *str,int page,int y)
  321. ;*****************************************************
  322.     align    4                ; align set
  323.     public    putstr
  324. putstr    proc    near
  325.     push    ebp
  326.     push    eax                ; vram address work
  327.     mov    ebp,esp
  328.     xor    eax,eax
  329.     push    eax
  330.  
  331.     push    gs
  332.     push    fs
  333.     push    es
  334.     push    esi
  335.     push    edi
  336.     push    edx
  337.     push    ecx
  338.     push    ebx
  339.  
  340.     cld
  341.     mov    ax,VRAMSEL            ; VRAM Selecter
  342.     mov    es,ax                ; es = VRAM Selecter
  343.     mov    ax,TBIOSEL            ; TBIOS Selecter
  344.     mov    fs,ax                ; fs = TBIOS
  345.     mov    ax,ds
  346.     mov    gs,ax                ; gs = ds
  347.  
  348.     mov    edi,[ebp].p_x            ; dsp pos Y !!!! x == y
  349.     shl    edi,9                ; Y * 512
  350.     and    edi,03FFFFh            ; mask 1 page
  351.     mov    [ebp].p_vadr,edi        ; work set
  352.  
  353.     align    4                ; align set
  354. putlop:                        ; Put Loop
  355.     mov    esi,[ebp].p_str            ; char *str
  356. putlp2:
  357.     lodsb                    ; Get String    ※
  358.     or    al,al
  359.     je    end_put                ; End of String ?
  360.  
  361.     movzx    eax,al
  362.     mov    bl,[eax+offset kantbl]
  363.     and    bl,ISKAN1
  364.     jz    putank                ; Not iskanji1 ?
  365.     movzx    ebx,byte ptr [esi]
  366.     mov    bh,[ebx+offset kantbl]
  367.     and    bh,ISKAN2
  368.     jz    putank                ; Not iskanji2 ?
  369.     mov    bh,al
  370.     inc    esi                ; doubel_word ?????    ※
  371.     mov    [ebp].p_str,esi            ; Save *str
  372.  
  373.     shl    bh,1                ; Shift Jis to Jis
  374.     cmp    bl,080h
  375.     adc    bx,1f61h
  376.     add    bl,7fh
  377.     jc    short knf1
  378.     add    bl,0a2h
  379. knf1:    and    bh,7fh                ; StoJ end
  380.  
  381.     mov    ax,0100h
  382.     mov    dx,1010h
  383.  
  384.     call    pword ptr fs:[00a0h]        ; Get Kanji Font
  385.  
  386.     mov    edi,[ebp].p_vadr        ; *vram
  387.     add    edi,[ebp-4]
  388.     and    edi,03FFFFh            ; mask 1 page
  389.     or    edi,[ebp].p_page        ; or Page Offset
  390.     mov    ebx,offset fntcol
  391.     xor    edx,edx                ; edx=0
  392.     xor    ecx,ecx                ; ecx=0
  393.  
  394.     REPT    16
  395.     lodsw                    ; Get Kanji Font Pattern
  396.     mov    cl,al                ; Left Font Pattern
  397.     mov    dl,ah                ; Right Font Pattern
  398.     mov    eax,gs:[ebx+ecx*4]        ; Get Vram Bit Patan
  399.     stosd                    ; Write Left Font 
  400.     mov    eax,gs:[ebx+edx*4]        ; Get Vram Bit Patan
  401.     stosd                    ; Write Right Font
  402.     add    edi,512-4*2            ; 1 Line 512 Byte
  403.     ENDM
  404.  
  405.     mov    ax,gs
  406.     mov    ds,ax
  407.     add    dword ptr [ebp-4],8        ; 16 / 2 Next vram Address
  408.  
  409.     jmp    putlop                ; Next Put String Loop
  410.  
  411.     align    4                ; align set
  412. putank:                        ; Write Ank Font
  413.     cmp    al,1Bh                ; ESC code
  414.     jne    putak1
  415.     lodsb                    ; Get String
  416.  
  417. putak1:    mov    [ebp].p_str,esi            ; Save *str
  418.     movzx    esi,al
  419.     shl    esi,6                ; 4 x 16 = 64
  420.     add    esi,offset ankfnt        ; ANK Font Table Offset
  421.  
  422.     mov    edi,[ebp].p_vadr        ; *vram
  423.     add    edi,[ebp-4]
  424.     and    edi,03FFFFh            ; mask 1 page
  425.     or    edi,[ebp].p_page        ; page add
  426.     mov    ebx,512-4
  427.  
  428.     REPT    16
  429.     movsd                    ; Trans Font
  430.     add    edi,ebx                ; Line add
  431.     ENDM
  432.  
  433.     add    dword ptr [ebp-4],4        ; 8 / 2 Next vram Address
  434.  
  435.     jmp    putlop                ; Next Put String Loop
  436.  
  437.     align    4
  438. end_put:
  439.     mov    ebx,320
  440.     sub    ebx,[ebp-4]            ; nokori dword
  441.     je    nonclr
  442.     shr    ebx,2                ; / 4
  443.  
  444.     mov    edi,[ebp].p_vadr        ; *vram
  445.     add    edi,[ebp-4]            ; work add
  446.     and    edi,03FFFFh
  447.     or    edi,[ebp].p_page        ; or Page Offset
  448.     mov    edx,[ebp-4]
  449.     add    edx,512-320
  450.     mov    eax,[fntcol]
  451.     REPT    16
  452.     mov    ecx,ebx                ; nokori dword
  453.     rep    stosd
  454.     add    edi,edx
  455.     and    edi,03FFFFh
  456.     or    edi,[ebp].p_page
  457.     endm
  458. nonclr:
  459.     pop    ebx
  460.     pop    ecx
  461.     pop    edx
  462.     pop    edi
  463.     pop    esi
  464.     pop    es
  465.     pop    fs
  466.     pop    gs
  467.     add    esp,8                ; work pop
  468.     pop    ebp
  469.     ret                    ; end of putstr
  470. putstr    endp
  471.  
  472. ;***************************************************
  473. ;void    ctblset(int chrcol,int bakcol);
  474. ;***************************************************
  475.     public    ctblset
  476. ctblset    proc    near
  477.     push    ebp
  478.     mov    ebp,esp
  479.     push    esi
  480.     push    edi
  481.     push    fs
  482.  
  483.     movzx    eax,byte ptr [ebp+8]
  484.     and    al,0fh
  485.     mov    eax,[eax*4+offset colptn]
  486.     mov    [ebp+8],eax            ; color pattn cheng
  487.  
  488.     movzx    eax,byte ptr [ebp+12]
  489.     and    al,0fh
  490.     mov    eax,[eax*4+offset colptn]
  491.     mov    [ebp+12],eax            ; color pattn cheng
  492.  
  493.     mov    ecx,256                ; color bit pattn gen
  494.     mov    esi,offset fntptn
  495.     mov    edi,offset fntcol
  496. ctblp:    lodsd
  497.     mov    edx,eax
  498.     not    edx
  499.     and    eax,[ebp+8]
  500.     and    edx,[ebp+12]
  501.     or    eax,edx
  502.     stosd
  503.     loop    ctblp
  504.  
  505.     mov    ax,FONTSEL            ; ANK Font Selecter
  506.     mov    fs,ax
  507.     mov    esi,3D800h
  508.     mov    edi,offset ankfnt
  509.  
  510.     mov    ecx,16*256            ; ANK bit pattn gen
  511. aktb1:    movzx    eax,byte ptr fs:[esi]
  512.     inc    esi
  513.     mov    eax,[eax*4+fntcol]
  514.     stosd
  515.     loop    aktb1
  516.  
  517.     pop    fs
  518.     pop    edi
  519.     pop    esi
  520.     pop    ebp
  521.     ret
  522. ctblset    endp
  523.  
  524. ;**************************************************************
  525. ;
  526. ;    任意のCRTCレジスタに任意のワ-ド値を設定する
  527. ;
  528. ;void    vram_offset(reg,ofs)
  529. ;int    reg;        [ebp+8]        CRTCレジスタNo.
  530. ;int    ofs;        [ebp+12]    設定値
  531. ;**************************************************************
  532.     public    vram_offset
  533. vram_offset    proc    near
  534.     push    ebp
  535.     mov    ebp,esp
  536.     push    edx
  537.  
  538.     mov    al,[ebp+8]            ; CRTCレジスタNo.を
  539.     mov    dx,0440h            ; 
  540.     out    dx,al                ; 書き込み
  541.     mov    eax,[ebp+12]            ; 設定値を
  542.     mov    dx,0442h            ;
  543.     out    dx,ax                ; 書き込む
  544.  
  545.     pop    edx
  546.     pop    ebp
  547.     ret
  548. vram_offset    endp
  549.  
  550.     public    sjistojis
  551. sjistojis    proc    near
  552.     movzx    eax,word ptr [esp+4]
  553.     shl    ah,1                ; Shift Jis to Jis
  554.     cmp    al,080h
  555.     adc    ax,1f61h
  556.     add    al,7fh
  557.     jc    short sjis1
  558.     add    al,0a2h
  559. sjis1:    and    ah,7fh                ; StoJ end
  560.     ret
  561. sjistojis    endp
  562.  
  563.     public    peek
  564. peek    proc    near
  565.     push    edx
  566.     sub    eax,eax
  567.     mov    dx,[esp+8]
  568.     in    al,dx
  569.     pop    edx
  570.     ret
  571. peek    endp
  572.  
  573. pmcode    ends
  574. ;*************************************
  575. ;    protect code segment defs end
  576. ;*************************************
  577.  
  578.     end
  579.